/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.deployment.servicoimpl;

import br.com.deployment.entidade.humana.Pessoa;
import br.com.deployment.interfaces.PessoaDaoIn;
import br.com.deployment.servico.PessoaServico;
import br.com.deployment.utilitario.Caracteres;
import br.com.deployment.utilitario.Msg;
import br.com.deployment.utilitario.TipoPessoa;
import java.util.Date;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.EJBException;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;

/**
 *
 * @author luciano
 */
@Stateless
@LocalBean
public class PessoaServicoImpl implements PessoaServico {

    @EJB
    PessoaDaoIn dao;
    
    
    @Override
    public void salvar(Pessoa pessoa) {
        try {
            System.err.println(pessoa.getCnpj());
            verificaTipoPessoa(pessoa);
            
            if(pessoa.getTipo() == TipoPessoa.Fisica && 
                    dao.existCPF(pessoa.getCpf()) ){
               Msg.messagemWarn("CPF já cadastrado");
               return;
            }
            if(pessoa.getTipo() == TipoPessoa.Juridica && dao.existCNPJ(pessoa.getCnpj())){
               Msg.messagemWarn("CNPJ já cadastrado"); 
               return;
            }
            
            pessoa.setDatacad(new Date());   
            System.err.println(pessoa.getCnpj());
            dao.save(pessoa);
            Msg.messagemInfo("Cliente Salvo com Sucesso !");
        } catch (EJBException erro) {
            System.err.println("ERRO");
            Msg.messagemWarn("EJB Erro");
        } catch (Exception erro) {
            System.err.println("ERRO");
            Msg.messagemError("falha ao completar esta transação");
        }
    }

    @Override
    public void atualizar(Pessoa pessoa) {
        try {
            verificaTipoPessoa(pessoa);
            dao.update(pessoa);
            Msg.messagemInfo("Cliente Atualizado com Sucesso !");
        } catch (EJBException erro) {
            System.err.println("ERRO");
            Msg.messagemWarn("Acesso falhado");
        } catch (Exception erroE) {
            System.err.println("ERRO");
            Msg.messagemError("falha ao completar esta transação");
        }
    }

    @Override
    public void remover(Pessoa pessoa) {
        dao.delete(pessoa);
    }

    @Override
    public Pessoa find(int id) {
        return dao.find(id);
    }

    @Override
    public Pessoa findNome(String nome) {
        return dao.findNome(nome);
    }

    @Override
    public List<Pessoa> pessoas() {
        return dao.findAll();
    }

    @Override
    public List<Pessoa> findPessoa(Pessoa pessoa, TipoPessoa tipoPessoa) {
        try{
            return dao.findPessoa(pessoa, tipoPessoa);  
        }catch(Exception erro){
            erro.getMessage();
        }
        return null;  
    }

    @Override
    public Pessoa findDoc(String doc) {
        return dao.findDoc(doc);
    }

    public void verificaTipoPessoa(Pessoa pessoa) {
        if (pessoa.getCnpj() != null && pessoa.getTipo() == TipoPessoa.Juridica){            
            pessoa.setCnpj(Caracteres.removecaracter(pessoa.getCnpj()));
             pessoa.setCpf(null);
        }
        if (pessoa.getCpf() != null && pessoa.getTipo() == TipoPessoa.Fisica){
            pessoa.setCpf(Caracteres.removecaracter(pessoa.getCpf()));
            pessoa.setCnpj(null);
        }
    }
    

    @Override
    public List<Pessoa> pessoasOrder() {
        return dao.pessoasOrder();
    }
    
    @Override
    public boolean existCPF(String doc){
        return dao.existCPF(doc);
    }
    
    @Override
    public boolean existCNPJ(String doc){
        return dao.existCNPJ(doc);
    }
}
